--面向对象的汇总
--所有对象的基类
Object={}

--封装
--给空对象设置元表和index
function Object:new()
	local obj={}
	self.__index=self
	setmetatable(obj,self)
	return obj
end

--继承
function Object:subclass(className)
	_G[className]={}
	local obj=_G[className]

	--设置super
	obj.super=self
	self.__index=self
	setmetatable(obj,self)
end

Object:subclass("GameObject")
GameObject.posX=0
GameObject.posY=0
function GameObject:Move()
	self.posX=self.posX+1
	self.posY=self.posY+1
end

local obj=GameObject:new()
print(obj.posX)
obj:Move()
---修改的是obj的posX，这里obj已经有了posX了
print(obj.posX)

local obj2=GameObject:new()
print(obj2.posX)
obj2:Move()
print(obj2.posX)

GameObject:subclass("Player")
--重写Move方法
function Player:Move()
	--调用父类
	self.super.Move(self)
end

local p1=Player:new()
print(p1.posX)
p1:Move()
print(p1.posX)

local p2=Player:new()
print(p2.posX)
p2:Move()
print(p2.posX)